app.js
let ids = [1, 2, 3];
let obj = {};
for (let i in ids) {
obj = { ...obj, ids[i]: "" };
}
console.log(obj);
While executing the above code, I get the below error.
Parsing error: Unexpected token, expected ","
4 |
5 | for (let i in ids) {
> 6 | obj = { ...obj, ids[i]: "" };
| ^
7 | }
8 |
9 | console.log(obj);eslint
I get this error, when I hover the mouse above the line obj = { ...obj, ids[i]: "" }; in my VS Code.
When I run the code using node, i.e on node app.js. I get the following error in my terminal :
obj = { ...obj, ids[i]: "" };
^
SyntaxError: Unexpected token '['
at wrapSafe (internal/modules/cjs/loader.js:988:16)
at Module._compile (internal/modules/cjs/loader.js:1036:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
at Module.load (internal/modules/cjs/loader.js:937:32)
at Function.Module._load (internal/modules/cjs/loader.js:778:12)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
at internal/main/run_main_module.js:17:47
What am I doing wrong? I expect the value of obj at the end to be {1 : "", 2 : "", 3: ""}
There are several solutions.
for (let i in ids) {
obj = { ...obj, [ids[i]]: "" }; // Brackets make it act as a key name instead of something else
}
for (let i in ids) {
obj[ids[i]] = ""; // This adds a value
}
Use [ids[i]] instead of ids[i].
let ids = [1, 2, 3];
let obj = {};
for (let i in ids) {
obj = { ...obj, [ids[i]]: "" };
}
console.log(obj);
is[i] is key that should be resolve runtime, so you should make it computed property names
Starting with ECMAScript 2015, the object initializer syntax also supports computed property names. That allows you to put an expression in brackets [], that will be computed and used as the property name. This is reminiscent of the bracket notation of the property accessor syntax, which you may have used to read and set properties already. - MDN
let ids = [1, 2, 3];
let obj = {};
for (let i in ids) {
obj = { ...obj, [ids[i]]: "" };
}
console.log(obj);